/**
 * history.js v0.4
 *
 * 1 通过修改location.hash产生历史，hashchange事件处理后退
 * 2 IE8/9/10/Firefox/Safari/Chrome/Opera支持, IE6/7不支持hashchange事件
 *
 * example :
 *
 * History.push({
 *     param : // func参数
 *     func : 回调函数
 *     scope : func执行上下文
 * });
 *
 */

History = function() {

    var
        // 存储历史记录
        list = [],

        // 历史记录索引
        index = 0;

    function push(data) {
        if(typeof data !== 'object') return;

        if(typeof data.param_url === undefined || typeof data.func !== 'function') return;

        list[index] = data;
        updateHash();
        index++;

    }

    function updateHash() {
        location.hash = index;
    }

    function get(idx) {
        var item, param_url, param_args, func, scope;
        if(idx != index-1) {
            item = list[idx];
            if(item) {
                param_url = item.param_url;
                param_args = item.param_args;
                func  = item.func;
                func.call(this, param_url, param_args);
            }
        }

    }

    window.onhashchange = function() {
        get(location.hash.replace(/#/, ''));
    }

    return {
        push : push
    };
}();